LINQ ব্যবহার করে Complex Query Construction

Computer Programming - এফ শার্প প্রোগ্রামিং (F# Programming) - F# এবং LINQ (Language Integrated Query)
193

LINQ ব্যবহার করে Complex Query Construction

LINQ (Language Integrated Query) হল একটি শক্তিশালী কৌশল যা C#, F# এবং অন্যান্য .NET ভাষায় ডেটা কোয়েরি করার জন্য ব্যবহৃত হয়। LINQ-এর মাধ্যমে আপনি ডেটাকে সহজেই query করতে পারেন, তা হতে পারে arrays, collections, databases, XML বা অন্যান্য ডেটা সোর্সের উপর। LINQ আপনাকে SQL-like syntax ব্যবহার করে কোড লেখার সুবিধা দেয়, যা ডেটা কোয়েরি করার জন্য আরও কার্যকরী এবং পাঠযোগ্য।

F# তে LINQ এর মাধ্যমে complex queries তৈরি করতে হলে আপনাকে LINQ query syntax অথবা LINQ method syntax ব্যবহার করতে হবে। এই tutorial এ আমরা F# তে LINQ ব্যবহার করে কিভাবে জটিল কোয়েরি তৈরি করতে পারি তা দেখব।


১. LINQ Query Syntax এবং Method Syntax

F# তে LINQ-এর দুটি প্রধান সিনট্যাক্স আছে:

  1. Query Syntax: SQL-এর মতো দেখতে হয় এবং সাধারণত query { ... } ব্লকের ভিতরে লেখা হয়।
  2. Method Syntax: LINQ এর জন্য built-in ফাংশনাল মেথড ব্যবহার করা হয় (যেমন Select, Where, OrderBy ইত্যাদি)।

আমরা এই দুইটি সিনট্যাক্সের মাধ্যমে complex query construction দেখব।


২. LINQ Query Syntax উদাহরণ

লিনক কুয়েরি সিনট্যাক্সের মাধ্যমে filtering, projecting, sorting, এবং joining করা যায়।

উদাহরণ 1: Filter, Select and OrderBy

open System
open System.Linq

// Sample data (list of people)
type Person = { Name: string; Age: int }
let people = 
    [ { Name = "Alice"; Age = 28 }
      { Name = "Bob"; Age = 24 }
      { Name = "Charlie"; Age = 30 }
      { Name = "David"; Age = 35 }
      { Name = "Eva"; Age = 22 } ]

// LINQ Query Syntax for complex query construction
let query = 
    query {
        // Filter condition (Age > 25)
        let filtered = people |> Seq.filter (fun p -> p.Age > 25)

        // Sort by Age
        let ordered = filtered |> Seq.sortBy (fun p -> p.Age)

        // Select Name and Age
        for person in ordered do
            select (person.Name, person.Age)
    }

// Execute the query and print the results
query |> Seq.iter (fun (name, age) -> printfn "Name: %s, Age: %d" name age)

ব্যাখ্যা:

  • প্রথমে Seq.filter ব্যবহার করে Age > 25 শর্ত দিয়ে filtering করা হয়েছে।
  • তারপর Seq.sortBy ব্যবহার করে বয়েসের উপর ভিত্তি করে সাজানো হয়েছে।
  • অবশেষে select ব্যবহার করে প্রতিটি person এর নাম এবং বয়স নেয়া হয়েছে।
  • এই কোডে LINQ query syntax ব্যবহার করা হয়েছে যা query { ... } ব্লকের মধ্যে লেখা হয়েছে।

উদাহরণ 2: Join Query

// Sample data (orders and products)
type Order = { OrderId: int; ProductId: int; Quantity: int }
type Product = { ProductId: int; ProductName: string }

let orders = 
    [ { OrderId = 1; ProductId = 101; Quantity = 2 }
      { OrderId = 2; ProductId = 102; Quantity = 1 }
      { OrderId = 3; ProductId = 101; Quantity = 3 } ]

let products = 
    [ { ProductId = 101; ProductName = "Laptop" }
      { ProductId = 102; ProductName = "Phone" } ]

// LINQ Query Syntax for join operation
let query =
    query {
        for order in orders do
        join product in products on (order.ProductId = product.ProductId) equals true
        select (order.OrderId, product.ProductName, order.Quantity)
    }

// Execute the query and print the results
query |> Seq.iter (fun (orderId, productName, quantity) -> 
    printfn "Order ID: %d, Product: %s, Quantity: %d" orderId productName quantity)

ব্যাখ্যা:

  • join ব্যবহার করে orders এবং products লিস্টের মধ্যে ProductId এর ভিত্তিতে join করা হয়েছে।
  • তারপর select ব্যবহার করে উভয় লিস্টের মান (OrderId, ProductName, Quantity) বের করা হয়েছে।

৩. LINQ Method Syntax উদাহরণ

Method Syntax হলো LINQ ফাংশনাল অপারেটরগুলির মাধ্যমে কোয়েরি লেখা। এটি আরও বেশি ফাংশনাল এবং পাঠযোগ্য।

উদাহরণ 1: Filter, Select and OrderBy using Method Syntax

open System
open System.Linq

// Sample data (list of people)
type Person = { Name: string; Age: int }
let people = 
    [ { Name = "Alice"; Age = 28 }
      { Name = "Bob"; Age = 24 }
      { Name = "Charlie"; Age = 30 }
      { Name = "David"; Age = 35 }
      { Name = "Eva"; Age = 22 } ]

// LINQ Method Syntax
let result = 
    people
    |> Seq.filter (fun p -> p.Age > 25)  // Filtering by age
    |> Seq.sortBy (fun p -> p.Age)        // Sorting by age
    |> Seq.map (fun p -> p.Name, p.Age)   // Selecting name and age

// Execute the query and print the results
result |> Seq.iter (fun (name, age) -> printfn "Name: %s, Age: %d" name age)

ব্যাখ্যা:

  • Seq.filter ফাংশনটি Age > 25 শর্তে ডেটা ফিল্টার করে।
  • Seq.sortBy ব্যবহার করে Age এর ভিত্তিতে ডেটা সাজানো হয়।
  • Seq.map ব্যবহার করে name এবং age নির্বাচন করা হয়।
  • এই কোডে LINQ Method Syntax ব্যবহার করা হয়েছে, যেখানে ফাংশনাল অপারেটরগুলো পাইপলাইনের মাধ্যমে চেইন করা হয়েছে।

উদাহরণ 2: GroupBy using Method Syntax

// Sample data (list of people)
let people = 
    [ { Name = "Alice"; Age = 28 }
      { Name = "Bob"; Age = 24 }
      { Name = "Charlie"; Age = 30 }
      { Name = "David"; Age = 35 }
      { Name = "Eva"; Age = 22 } ]

// LINQ GroupBy using Method Syntax
let grouped = 
    people
    |> Seq.groupBy (fun p -> p.Age / 10)  // Group by age decade

// Print the results
grouped |> Seq.iter (fun (ageGroup, group) ->
    printfn "Age Group: %d0s" ageGroup
    group |> Seq.iter (fun p -> printfn "  Name: %s, Age: %d" p.Name p.Age)
)

ব্যাখ্যা:

  • Seq.groupBy ফাংশনটি Age এর ভিত্তিতে grouping করে, এখানে প্রতি দশকে (age decade) grouping করা হচ্ছে।
  • প্রতিটি গ্রুপের জন্য Name এবং Age প্রিন্ট করা হচ্ছে।

৪. Combining Query Syntax and Method Syntax

এটি একটি মিশ্রণ যা LINQ Query Syntax এবং Method Syntax এর শক্তি একত্রিত করে।

// Sample data (list of people)
let people = 
    [ { Name = "Alice"; Age = 28 }
      { Name = "Bob"; Age = 24 }
      { Name = "Charlie"; Age = 30 }
      { Name = "David"; Age = 35 }
      { Name = "Eva"; Age = 22 } ]

// Combine Query Syntax and Method Syntax
let query =
    query {
        for person in people do
        where (person.Age > 25)
        sortBy person.Age
        select person
    }
    |> Seq.map (fun p -> p.Name, p.Age)  // Method syntax for further processing

// Execute the query and print the results
query |> Seq.iter (fun (name, age) -> printfn "Name: %s, Age: %d" name age)

ব্যাখ্যা:

  • এখানে প্রথমে query syntax ব্যবহার করে people এর উপরে কোয়েরি করা হয়েছে, এরপর method syntax ব্যবহার করে নাম এবং বয়স নির্বাচন করা হয়েছে।

উপসংহার

LINQ F# এবং অন্যান্য .NET ভাষায় ডেটার সাথে কাজ করার জন্য একটি শক্তিশালী এবং সোজা পদ্ধতি। Complex Queries তৈরি করতে আপনি query syntax বা method syntax ব্যবহার করতে পারেন, যা ডেটা ফিল্টার, সজ্জিতকরণ, গ্রুপিং, অথবা জয়নিং করার জন্য অত্যন্ত কার্যকরী। LINQ আপনাকে SQL এর মতো কোয়েরি লেখার সুবিধা দেয়, যা ড

েটার উপরে কার্যকরী এবং পরিষ্কার ট্রান্সফরমেশন করার জন্য ব্যবহৃত হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...